//
// Created by tanzx on 12/21/0021.
//
#include "override_function.h"

/**
 * 输出：
 * in Base::init()
 * in Derived::init()
 *
 * /in Derived::init()
 *
 * 分析：
 * Base *pb;
 * 1、只是声明，不做处理；
 * pb = new Derived();
 * 1、调用new操作符，分配内存；
 * 2、调用基类（Base）的构造函数；
 * 3、在基类的构造函数中调用init()，执行程序首先判断出当前对象的实际类型是Base（此时Derived还没有构造出来，当前不会是Derived），所以这里调用的Base::init()；
 * 4、调用派生类（Derived）的构造函数，在这里同样要调用init()，执行程序判断出当前对象的实际类型是Derived，调用Derived::init();
 * pb->do_init();
 * 1、构造完毕后调用Derived::init()；
 */
void test_override_function()
{
    Base *pb;
    pb = new Derived();//1、调用new操作符，分配内存；2、调用基类（Base）的构造函数；3、在
    cout << endl;
    pb->do_init();
    delete pb;
}
